[2025-07-10] Cookie-Session

🦥 본문

정의

웹 서버가 브라우저에 저장하는 데이터. Key-value 형태로 이루어져 있다.

HTTP 특징

  • Connectionless : 하나의 요청에 하나의 응답을 한 후 연결을 종료.
  • Stateless : 통신이 끝난 후 상태 정보를 저장하지 않음

목적

HTTP의 특징으로 인해 서버가 사용자를 기억하지 못하기 때문에 사용한다. 사용자 정보를 브라우저에 저장하여 다음 통신 때 자동으로 다시 보내줌. 클라이언트를 기억하고 식별할 수 있다.

※ 쿠키가 필요 없는 요청일 때에도 쿠키를 보내기 때문에 리소스가 낭비될 수 있다 → Modern Storage APIs를 통해 데이터를 저장하는 방식을 권장하고 있다.

동작 흐름

  1. 사용자가 로그인 시, 서버에서 쿠키를 설정하여 보냄
  2. 브라우저는 이 쿠키를 저장
  3. 다음 요청부터는 자동으로 쿠키 포함
  4. 서버에서 쿠키를 통해 클라이언트 식별

구성 요소

항목 설명
이름 (Name) 쿠키의 키
값 (Value) 저장할 실제 값
도메인 (Domain) 쿠키가 적용될 사이트 범위
경로 (Path) 쿠키가 유효한 URL 경로
유효기간 (Expires/Max-Age) 언제까지 유지될지
보안 옵션 Secure, HttpOnly, SameSite

※ 서버가 별다른 검증하지 않는 경우 쿠키를 변조하여 서버에 요청하여 정보를 탈취할 수 있다.

쿠키 설정

서버 : HTTP 응답 헤더 내 쿠키 설정 헤더(Set-Cookie)를 추가하여 쿠키 설정

HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: name=test;
Set-Cookie: age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;
...

클라이언트 : JS를 통해 쿠키 설정

document.cookie = "name=test;"
document.cookie = "age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;"

Session

사용자와 서버 간의 연결 상태를 일정 시간 동안 유지하기 위한 서버 측 저장 공간

목적

HTTP의 특징으로 인해 서버가 사용자를 기억하지 못하기 때문에 사용한다.

동작 흐름

  1. 사용자가 로그인 시, 세션을 생성
  2. 세션에 고유 ID를 부여하고 이 ID를 쿠키로 사용자에게 전달
  3. 이후 요청마다 브라우저가 이 세션 ID를 자동으로 보냄
  4. ID를 통해 클라이언트 식별

※ 세션 하이재킹 : 쿠키를 훔치는 경우 세션 ID도 훔치기 때문에 정보가 탈취될 수 있다.

세션 vs 쿠키 차이

항목 쿠키 세션
저장 위치 클라이언트(브라우저) 서버
저장 용량 작음 (4KB 정도) 큼 (서버 메모리/DB에 따라 다름)
보안성 비교적 낮음 (조작 가능) 비교적 높음 (서버 관리)
유지 방법 클라이언트가 직접 보관 세션 ID만 브라우저에 저장, 실제 데이터는 서버에 저장
자동 전송 HTTP 요청 시 자동 전송 세션 ID가 쿠키로 전송됨

Categories:

Updated:

Leave a comment